Older people and those with underlying health conditions are at higher risk of being affected by the Coronavirus. These groups of people were already at higher risk of being socially isolated. Now they are potentially cut off from many of the usual sources of essential support, and they are less likely to have the skills, confidence and devices to get help online.
Public sector and community groups are working hard to support more vulnerable people in society, and we know they are looking for information on how best to target that work. We are determined to put our knowledge and experience to good use, and to help provide that information.
The map below shows 6,691 GP surgeries in England. It is designed to help identify areas where there are more people who don’t tend to use digital tools and services, or who are not online. We’ve used NHS data on registration for online GP services to make the map.
We acknowledge that registration alone does not imply confident use of online services. Equally, where people have not registered for online GP services this may not be because of a lack of necessary digital skills or access to devices and the internet.
The R source code that generates the map is viewable by clicking the “Code” button, below right. All the code for this project can be found in the project repository .
The final data that is used for the GP surgeries information on the map can be downloaded directly, here (csv format, 1.2MB).
full_data_sf <- readRDS("full_data_sf.Rds")
ccg_bounds <- readRDS("ccg_bounds.Rds")
surgeries_included <- nrow(filter(full_data_sf, !is.na(practice_name)))
less_than_thirty <- nrow(filter(full_data_sf, offline_pat_pct > 70))
more_than_thirty <- nrow(filter(full_data_sf, offline_pat_pct <= 70))
viridis_palette <- colorQuantile(palette = "viridis", domain = full_data_sf$older_popn_wtd, n = 5, reverse = TRUE)
full_data_under70 <- dplyr::filter(full_data_sf, offline_pat_pct < 70)
full_data_over70 <- dplyr::filter(full_data_sf, offline_pat_pct >= 70)
gp_map <- leaflet(full_data_sf) %>%
addProviderTiles(providers$CartoDB.Positron, options = tileOptions(minZoom = 7, maxZoom = 14)) %>%
addPolygons(
data = ccg_bounds,
stroke = TRUE,
weight = 1,
opacity = 0.75,
color = "#6C7B8B",
fill = TRUE,
fillOpacity = 0,
group = "CCG boundaries",
label = ~ ccg20nm
) %>%
addCircles(
data = full_data_under70,
radius = ~ `^`(total_patients, 0.625),
stroke = TRUE,
color = "#00c5cd",
weight = 2,
opacity = 0.75,
fill = TRUE,
fillColor = ~ viridis_palette(older_popn_wtd),
fillOpacity = 0.75,
label = ~ practice_name,
group = "> 30% 'online'",
popup = paste0(
"<table>
<tr><th><h3>",
full_data_under70$practice_name,
"</h3>
</th>
<th style = 'font-weight: 400;'>",
full_data_under70$postcode,
"</th>
</tr>",
"<tr>
<td>Total number of patients:</td>
<td style='text-align: right'><strong>",
full_data_under70$total_patients,
"</strong></td>
</tr>",
"<tr>
<td>Number of patients aged 65+:</td>
<td style='text-align: right'><strong>",
full_data_under70$older_popn_unwtd,
"</strong></td>
</tr>",
"<tr>
<td>% patients <em>not</em> reg'd for an online service:</td>
<td style='text-align: right'><strong>",
full_data_under70$offline_pat_pct,
"%</strong></td>
</tr>",
"<tr>
<td>Online transactions in Feb 2020:</td>
<td style='text-align: right'><strong>",
full_data_under70$total_use,
"</strong></td>
</tr>
</table>"
)
) %>%
addCircles(
data = full_data_over70,
radius = ~ `^`(total_patients, 0.625),
stroke = TRUE,
color = "#ee1289",
weight = 2,
opacity = 0.75,
fill = TRUE,
fillColor = ~ viridis_palette(older_popn_wtd),
fillOpacity = 0.75,
label = ~ practice_name,
group = "< 30% 'online'",
popup = paste0(
"<table>
<tr><th><h3>",
full_data_over70$practice_name,
"</h3></th>
<th style = 'font-weight: 400;'>",
full_data_over70$postcode,
"</th>
</tr>",
"<tr>
<td>Total number of patients:</td>
<td style='text-align: right'><strong>",
full_data_over70$total_patients,
"</strong></td>
</tr>",
"<tr>
<td>Number of patients aged 65+:</td>
<td style='text-align: right'><strong>",
full_data_over70$older_popn_unwtd,
"</strong>
</td>
</tr>",
"<tr>
<td>% patients <em>not</em> reg'd for an online service:</td>
<td style='text-align: right'><strong>",
full_data_over70$offline_pat_pct,
"%</strong></td>
</tr>",
"<tr>
<td>Online transactions in Feb 2020:</td>
<td style='text-align: right'><strong>",
full_data_over70$total_use,
"</strong></td>
</tr>
</table>"
)
) %>%
hideGroup("> 30% 'online'") %>%
addLayersControl(
overlayGroups = c("> 30% 'online'",
"< 30% 'online'",
"CCG boundaries"),
position = "topleft",
options = leaflet::layersControlOptions(collapsed = FALSE)
) %>%
addLegend(
position = "topright",
colors = viridisLite::viridis(5, direction = -1, alpha = NULL),
opacity = 0.75,
title = "Number of patients aged 65+<br>(quintiles; 5 = most)",
labels = as.character(1:5)
) %>%
leaflet.extras::addFullscreenControl(position = "topleft",
pseudoFullscreen = FALSE) %>%
addMiniMap(
tiles = providers$CartoDB.Positron,
zoomLevelOffset = -4,
toggleDisplay = TRUE
)
saveWidget(gp_map, "leaflet_widget1.html")
gp_map